function getStyle(obj,name)
{
	if(obj.currentStyle)
	{
		return obj.currentStyle[name];
	}	
	else
	{
		return getComputedStyle(obj,false)[name];		
	}
}
function startmove(obj,json,options)
{
	options=options || {};
	options.time=options.time || 800;
	options.type=options.type || 'linear';
	
	clearInterval(obj.timer);
	
	var start={};
	var dis={};
	
	for(var name in json)
	{
		if(name=='opacity')
		{
			start[name]=parseFloat(getStyle(obj,name));	
		}
		else
		{
			start[name]=parseInt(getStyle(obj,name));		
		}
		if(isNaN(start[name]))
		{
			switch(name)
			{
				case 'left':
					start[name]=obj.offsetLeft;	
					break;
				case 'right':
					start[name]=obj.offsetRight;	
					break;
				case 'top':
					start[name]=obj.offsetTop;	
					break;
				case 'bottom':
					start[name]=obj.offsetBottom;	
					break;
				case 'width':
					start[name]=obj.offsetWidth;	
					break;
				case 'height':
					start[name]=obj.offsetHeight;	
					break;
				case 'opacity':
					start[name]=1;	
					break;
			}	
		}
		dis[name]=json[name]-start[name];
	}
	var n=0;
	var count=Math.floor(options.time/30);
	
	obj.timer=setInterval(function()
	{
		n++;
		for(var name in json)
		{
			switch(options.type)
			{
				case 'linear':
					var a=n/count;
					var cur=start[name]+dis[name]*a;
					break;
				case 'sease-in':
					var a=n/count;
					var cur=start[name]+dis[name]*a*a*a;
					break;
				case 'sease-out':
					var a=1-n/count;
					var cur=start[name]+dis[name]*(1-a*a*a);
					break;
			}
			if(name=='opacity')
			{
				obj.style.opacity=Math.round(cur*100)/100;
				obj.style.filter='alpha(opacity:'+Math.round(cur*100)+')';	
			}
			else
			{
				obj.style[name]=cur+'px';
			}
		}
		if(n==count)
		{
			clearInterval(obj.timer);
			options.end && options.end();	
		}
	},30);
}